﻿#ifndef PATH_DIY_ZXC
#define PATH_DIY_ZXC

#include "headlib.h"

#define WIN
//#define LINUX

//是否选择WIN平台，当为否时为LIUX平台(当前仅支持win，linux待测试)
#ifdef WIN
#include <direct.h>
#include <io.h>
#else
#include <sys/types.h>
#include <dirent.h>  
#include <cstring>
#endif


#ifndef ZXC_FILE_PATH_ENUMS
#define ZXC_FILE_PATH_ENUMS
namespace ZFP {
	// 针对_access函数的_AccessMode有如下可选参数
	enum FILE_PERMISSIONS	{
		F_OK = 0,		// 检测文件是否存在
		W_OK = 2,		// 检测文件写权限
		R_OK = 4,		// 检测文件读权限
		X_OK = 6		// 检测文件读写权限
	};
	enum FILE_PATH_LIST	{
		FILE_PATH_COM = 1,			// _FilesList函数中查找完整路径
		FILE_PATH_NAME = 2,			// _FilesList函数中查找文件名称
		FILE_PATH_SKIP_SUB=4		// _FilesList函数中查找文件跳过子目录	
	};
	enum FILE_PATH_MKDIR {
		MAKE_DIR_SUCCESS = 0,	// 创建路径成功
		MAKE_DIR_EXISTS = 11,	// 文件路径已存在
		MAKE_DIR_FAILED = -11	// 文件路径创建失败
	};
}
#endif

#ifndef PATHZXC_DEBUG
#define PATHZXC_DEBUG
#endif

class PathZXC {
// 成员变量
public:
	std::string completepath;
	std::string drive;
	std::string folderpath;
	std::string lastname;
	std::string extendname;
	std::vector<std::string> allfilepaths;
	std::vector<std::string> allfilenames;

	bool splitflag = true;	
	bool debugall = true;


// 成员函数
public:
	PathZXC();
	~PathZXC() ;
	void PathZXC_Init();

	void PathNormalize(std::string& inpath, std::string swapto);	// 路径标准化，可指定标准化到某钟表达形式（“/”或“\\”）
	void PathNormalize(std::string& inpath);						// 标准化路径为“/”形式
	void StringReplace(std::string& inputstr, const std::string bereplaced, const std::string replacedto);	//对输入字符串进行指定部分替换

	bool pathexists(std::string path);	// 判断文件路径是否存在
	char pathmkdir(std::string path);	// 创建所输入的路径
	std::vector<std::string> GetAllFiles(uchar flag= (ZFP::FILE_PATH_LIST::FILE_PATH_COM) | (ZFP::FILE_PATH_LIST::FILE_PATH_SKIP_SUB));									// 获取当前对象所指定路径下的所有文件路径
	std::vector<std::string> GetAllFiles(std::string inpath, uchar flag = ZFP::FILE_PATH_LIST::FILE_PATH_COM);	// 获取指定路径下的所有文件路径，可设置标志位flag
	void MYPathSplit(std::string inpath, std::string& drive, std::string& folder, std::string& name, std::string& evtname);//外部调用的路径分割

private:
	void _pathsplit(std::string inpath, std::string& drive, std::string& folder, std::string& name, std::string& evtname);	// 路径分割

	void _FilesList(std::string path, std::vector <std::string>& files, std::string fileclass, uchar flag);	// 文件路径查找基函数
};


#endif		// PATH_DIY_ZXC